import { getPage, post, get } from '../../request'

const ns = '/sys/role'

export interface Role {
  roleId: string // 角色ID
  roleCode: string // 编号
  roleName: string // 名称
  roleType: number // 类型, 0:系统级, 1:用户级
  roleStatus: number // 状态, 0:禁用, 1:启用

  userCount: number // 用户数量
}

export const roleApi = {
  /**
   * 查询分页角色列表
   * @param page
   * @param params
   * @returns
   */
  findListPage: (page: AxiosType.Pagination, params?: { [key: string]: any }) => {
    return getPage({ url: ns, params }, page)
  },

  /**
   * 查询单个角色
   */
  findById: (id: string) => {
    return get({ url: `${ns}/${id}` })
  },

  /**
   * 保存角色
   *
   * @param {*} data 角色对象
   * @returns
   */
  save(data: Role) {
    return post({
      url: ns,
      data
    })
  },

  /**
   * 删除角色
   *
   * @param {*} data 角色id数组
   * @returns
   */
  delete(data: string[]) {
    return post({
      url: `${ns}/delete`,
      data
    })
  },

  /**
   * 修改角色状态
   * @param data
   * @returns
   */
  updateRoleStatus(data: Role) {
    return post({
      url: `${ns}/status/update`,
      data
    })
  },

  /**
   * 查询角色下用户分页列表
   * @param page
   * @param params { exclude: false } //可以获取 包含在roleId内的用户，或者不在roleId的用户, 默认false
   * @returns
   */
  findUserPage: (page: AxiosType.Pagination, roleId: string, params?: { [key: string]: any }) => {
    return getPage({ url: `${ns}/user/${roleId}`, params }, page)
  },

  /**
   * 添加角色下用户
   * @param roleId
   * @param userIds
   * @returns
   */
  addUsers: (roleId: string, userIds: string[]) => {
    return post({
      url: `${ns}/user/add`,
      data: { roleId, userIds }
    })
  },

  /**
   * 移除角色下用户
   * @param roleId
   * @param userIds
   * @returns
   */
  removeUsers: (roleId: string, userIds: string[]) => {
    return post({
      url: `${ns}/user/remove`,
      data: { roleId, userIds }
    })
  },

  /**
   * 给角色授权菜单及权限
   *
   * @param {*} roleId
   * @param {*} data //包括4个节点trueNodeIds, trueFuncKeys, falseNodeIds, falseFuncKeys
   * @returns
   */
  authMenus: (
    roleId: string,
    addMenuIds: string[],
    addMenuIdFuncKeys: string[],
    deleteMenuIds: string[],
    deleteMenuIdFuncKeys: string[]
  ) => {
    return post({
      url: `${ns}/menu/auth`,
      data: {
        roleId,
        addMenuIds,
        addMenuIdFuncKeys,
        deleteMenuIds,
        deleteMenuIdFuncKeys
      }
    })
  },

  /**
   * 获取角色的授权菜单ID及功能ID
   * @param roleId
   * @returns
   */
  findMenus: (roleId: string) => {
    return get({ url: `${ns}/menu`, params: { roleId } })
  }
}
